//package com.aiyige.utils;
//
//import android.app.Activity;
//import android.media.MediaMetadataRetriever;
//import android.os.PowerManager;
//import android.text.TextUtils;
//import android.util.Log;
//
//import com.aiyige.MyApp;
//import com.netcompss.ffmpeg4android.GeneralUtils;
//import com.netcompss.ffmpeg4android.Prefs;
//import com.netcompss.ffmpeg4android.ProgressCalculator;
//import com.netcompss.loader.LoadJNI;
//import com.vondear.rxtools.RxFileTool;
//
//import java.io.File;
//
//import static com.aiyige.configs.MyConfig.AIYIGE_ROOT_DIR;
//import static java.lang.Thread.sleep;
//
///**
// * Created by xiachao on 2017/11/3.
// */
//
//public class TranscoderUtilsOld {
//
//
//    private static final String TRANSCODER_DIR = AIYIGE_ROOT_DIR + ".transcoder" + File.separator;
//
//    private static final String NO_MEDIA = AIYIGE_ROOT_DIR + ".nomdia";
//
//    private static final String WATERMARK_DIR = TRANSCODER_DIR + File.separator + ".watermark"+File.separator;
//
//    private static final String WATERMARK_PATH = WATERMARK_DIR + File.separator + "logo.png";
//
//    // 转码cmd日志
////    private static final String TRANSCODER_LOG = TRANSCODER_DIR + "transcoder.log";
//    LoadJNI transcoder;
//    PowerManager.WakeLock wakeLock;
//
//    public void setCallback(transcoderCallback callback) {
//        this.callback = callback;
//    }
//
//    transcoderCallback callback;
//
//    private String[] createCommand(String path) {
//        if (TextUtils.isEmpty(path)) {
//            return null;
//        }
//        File file = new File(path);
//        if (!file.exists()) {
//            return null;
//        }
//        VideoEntity videoEntity = new VideoEntity();
//        MediaMetadataRetriever mmr = new MediaMetadataRetriever();
//        String str = path;
//        String TAG = "xc";
//        Log.d(TAG, "str:" + str);
//        try {
//            mmr.setDataSource(str);
//            String title = mmr.extractMetadata(MediaMetadataRetriever.METADATA_KEY_TITLE); // api level 10, 即从GB2.3.3开始有此功能
//            videoEntity.setTitle(title);
//            String duration = mmr.extractMetadata(MediaMetadataRetriever.METADATA_KEY_DURATION); // 播放时长单位为毫秒
//            videoEntity.setDuration(TextUtils.isEmpty(duration)?0:Long.parseLong(duration));
//            String bitrate = mmr.extractMetadata(MediaMetadataRetriever.METADATA_KEY_BITRATE); // 从api level 14才有，即从ICS4.0才有此功能
//            videoEntity.setBitrate(TextUtils.isEmpty(bitrate)?0:Integer.parseInt(bitrate));
//            String width = mmr.extractMetadata(MediaMetadataRetriever.METADATA_KEY_VIDEO_WIDTH);// 视频宽
//            videoEntity.setWidth(TextUtils.isEmpty(width)?0:Integer.parseInt(width));
//            String height = mmr.extractMetadata(MediaMetadataRetriever.METADATA_KEY_VIDEO_HEIGHT);// 视频高
//            videoEntity.setHeight(TextUtils.isEmpty(height)?0:Integer.parseInt(height));
//            String framerate = mmr.extractMetadata(MediaMetadataRetriever.METADATA_KEY_CAPTURE_FRAMERATE);//帧率
//            videoEntity.setFramerate(TextUtils.isEmpty(framerate)?0:Integer.parseInt(framerate));
//        } catch (IllegalArgumentException e) {
//            e.printStackTrace();
////            ToastX.show("抱歉，视频无法转换"+e.toString());
//            if (callback != null) {
//                callback.failed("抱歉，视频无法转换"+e.toString());
//            }
//            return null;
//        } catch (IllegalStateException e) {
//            e.printStackTrace();
////            ToastX.show("抱歉，视频无法转换"+e.toString());
//            if (callback != null) {
//                callback.failed("抱歉，视频无法转换"+e.toString());
//            }
//            return null;
//        }
////        –vcodec h264
////        String[] complexCommand = {"ffmpeg","-y" ,"-i", path,"-strict","experimental", "-vf", "movie=/sdcard/videokit/logo.png [watermark]; [in][watermark] overlay=main_w-overlay_w-10:10 [out]","-s", "320x240","-r", "30", "-b", "15496k",  "/sdcard/videokit/out.mp4"};
//        //                "-f","m4v",
////        String[] complexCommand = {"ffmpeg","-y" ,
////                "-i", path,
////                "–vcodec","libx264",
////                "-preset", "ultrafast",
////                "-strict","experimental",
////                "-vf","movie="+WATERMARK_PATH+" [watermark]; [in][watermark] overlay=main_w-overlay_w-10:10 [out]",
////                "-s", videoEntity.getWidth()+"x"+videoEntity.getHeight(),
////                "-r", videoEntity.getFramerate()+"",
////                "-b",videoEntity.getBitrate()+"",
////                TRANSCODER_DIR+getFileName(path)};
//        //                "-b",videoEntity.getBitrate()+"",
////        ffmpeg -y -i /sdcard/videokit/in.mp4 -strict experimental -vcodec libx264 -preset ultrafast -crf 24 -acodec aac -ar 44100 -ac 2 -b:a 96k -s 320x240 -aspect 4:3 /sdcard/videokit/out3.mp4
//        String[]  complexCommand = {
//                "-y",
//                "-i",
//                "/sdcard/eig/in.mp4",
//                "-vcodec",
//                "x264",
//                "/sdcard/eig/out3.mp4"
//        };
//
//        return complexCommand;
//    }
//
//    private void prepare() {
//        GeneralUtils.copyLicenseFromAssetsToSDIfNeeded(MyApp.getDao(), TRANSCODER_DIR);
//        int rc = GeneralUtils.isLicenseValid(MyApp.getAppContext(), TRANSCODER_DIR);
//        Log.i("", "License check RC: " + rc);
//        // 创建chinadance目录
//        RxFileTool.createOrExistsDir(TRANSCODER_DIR);
//        RxFileTool.createOrExistsFile(NO_MEDIA);
//        // 检查水印文件夹是否存在，不存在则创建
//        checkWaterMark();
//        transcoder = new LoadJNI();
//        // 这里是为了确保屏幕锁屏后 App依然能够确保后台继续运行转码工作。
//        PowerManager powerManager = (PowerManager)getApp().getSystemService(Activity.POWER_SERVICE);
//        wakeLock = powerManager.newWakeLock(PowerManager.PARTIAL_WAKE_LOCK, "VK_LOCK");
//        Log.d(Prefs.TAG, "Acquire wake lock");
//        wakeLock.acquire();
//    }
//
//    private String getFileName(String path) {
//        return RxFileTool.getFileName(path);
//    }
//
//    public void start(final String path) {
//        if (!RxFileTool.fileExists(path)) {
//            ToastX.show("抱歉，视频文件不存在或被删除");
//            return;
//        }
//        new Thread(new Runnable() {
//            @Override
//            public void run() {
//                String fileName = getFileName(path);
//                boolean commandValidationFailedFlag = false;
//                prepare();
//                try {
//                    // running complex command with validation
//                    //vk.run(complexCommand, workFolder, getApplicationContext());
//
//                    // running without command validation
//                    //vk.run(complexCommand, workFolder, getApplicationContext(), false);
//
//                    // running regular command with validation
//
//                    // 测试水印
//                    String[] complexCommand = createCommand(path);
//                    if (complexCommand == null || complexCommand.length <= 0) {
//                        if (callback != null) {
//                            callback.failed("抱歉，指令生成失败");
//                        }
////                        ToastX.show("抱歉，指令生成失败");
//                        return;
//                    }
//                    doCallback();// 启动转码回调
//                    transcoder.run(complexCommand, TRANSCODER_DIR, getApp());
////			vk.run(GeneralUtils.utilConvertToComplex(commandStr), workFolder, getApplicationContext());
//
//                    Log.i(Prefs.TAG, "vk.run finished.");
//                    // copying vk.log (internal native log) to the videokit folder
////            GeneralUtils.copyFileToFolder(WATERMARK_DIR, demoVideoFolder);
//
//                } catch (Exception e) {
//                    Log.e(Prefs.TAG, "vk run exeption.", e);
//
////                    ToastX.show("vk run exeption."+ e);
//                    commandValidationFailedFlag = true;
//                    if (callback != null) {
//                        callback.failed("vk run exeption."+ e);
//                    }
//                } catch (Throwable e) {
//                    commandValidationFailedFlag = true;
////                    ToastX.show("vk run exeption."+ e);
//                    Log.e(Prefs.TAG, "vk run exeption.", e);
//                    if (callback != null) {
//                        callback.failed("vk run exeption."+ e);
//                    }
//                }
//                finally {
//                    if (wakeLock.isHeld()) {
//                        wakeLock.release();
//                        Log.i(Prefs.TAG, "Wake lock released");
//                    }
//                    else{
//                        Log.i(Prefs.TAG, "Wake lock is already released, doing noting");
//                    }
//                }
//                // log
//                RxFileTool.createOrExistsFile(TRANSCODER_DIR);
//                String status = GeneralUtils.getReturnCodeFromLog(TRANSCODER_DIR);
//                if (status.equals("Transcoding Status: Failed")) {
////                    ToastX.show("抱歉，该视频无法转码");
//
//                    if (callback != null) {
//                        callback.failed("抱歉，该视频无法转码");
//                    }
//                } else {
//                    if (callback != null) {
//                        callback.finish(TRANSCODER_DIR+fileName+".mp4");
//                    }
//                }
//
//            }
//        }).start();
//
//    }
//
//    private void doCallback() {
//        new Thread(new Runnable() {
//            ProgressCalculator pc = new ProgressCalculator(TRANSCODER_DIR+"vk.log");
//            @Override
//            public void run() {
//                int progress = -1;
//                try {
//                    while (true) {
//                        sleep(300);
//                        progress = pc.calcProgress();
//                        Log.i(Prefs.TAG, "==== progress is "+progress);
//                        if (progress != 0 && progress < 100) {
//                            if (callback != null) {
//                                callback.progress(progress);
//                            }
//                        }
//                        else if (progress == 100) {
//                            Log.i(Prefs.TAG, "==== progress is 100, exiting Progress update thread");
//                            pc.initCalcParamsForNextInter();
//                            break;
//                        }
//                    }
//                } catch(Exception e) {
//                    Log.e("threadmessage",e.getMessage());
//                }
//            }
//        }).start();
//
//    }
//
//
//    // 检查水印文件夹是否存在，不存在则创建
//    private void checkWaterMark() {
//        RxFileTool.createOrExistsDir(WATERMARK_DIR);
//        GeneralUtils.copyWatermarkFromAssetsToSDIfNeeded(getApp(),WATERMARK_DIR);
//    }
//
//    private MyApp getApp() {
//        return MyApp.getDao();
//    }
//
//    public void exit(String filePath) {
//        if (transcoder != null) {
//            transcoder.fExit(getApp());
//        }
////        RxFileTool.deleteFile(filePath);
//    }
//
//
//    public class VideoEntity {
//
//        public int getWidth() {
//            return width>1280?1280:width;
//        }
//
//        public void setWidth(int width) {
//            this.width = width;
//        }
//
//        public int getHeight() {
//            return height>720?720:height;
//        }
//
//        public void setHeight(int height) {
//            this.height = height;
//        }
//
//        public String getBitrate() {
//            long btr = bitrate / 1000;
//            if (bitrate == 0) {
//                bitrate = 1500;
//            }
//            return (btr > 1500?1500:btr) + "k";
//        }
//
//        public void setBitrate(long bitrate) {
//            this.bitrate = bitrate;
//        }
//
//        public int getFramerate() {
//            return framerate <= 25 ? 25: framerate;
//        }
//
//        public void setFramerate(int framerate) {
//            this.framerate = framerate;
//        }
//
//        public long getDuration() {
//            return duration;
//        }
//
//        public void setDuration(long duration) {
//            this.duration = duration;
//        }
//
//        public String getTitle() {
//            return title;
//        }
//
//        public void setTitle(String title) {
//            this.title = title;
//        }
//
//        public long bitrate;
//
//        public int framerate;
//
//        public long duration;
//
//        public String title;
//
//        public int width;
//
//        public int height;
//    }
//
//
//    public interface transcoderCallback {
//
//        void failed(String error);
//
//        void cancel();
//
//        void finish(String path);
//
//        void progress(int progress);
//    }
//}
